package com.torresquintero.oncologos.common.vista;

import com.torresquintero.oncologos.common.factory.LogginManager;

import java.util.ArrayList;
import java.util.Arrays;
import javax.swing.JMenu;
import javax.swing.JMenuItem;

/**
 * Clase para crear un menu que se adapte a los roles activos en el momento.
 * @author Camilo Andres
 *
 */
public class MenuOncologos extends JMenu {

    /**
     * Lista que indica los roles para los cuales
     * estara activo este menu.
     */
    private ArrayList<String> roles;
    /**
     * Nombre del componente.
     */
    private String nombreComponente;

    /**
     * Metodo que le asigna un nmobre al componente y extrae sus roles del
     * archivo de propiedades.
     * @param nombreComponente 
     */
    public void setNombreComponente(String nombreComponente) {
        this.nombreComponente = nombreComponente;
        roles = new ArrayList<String>();
        roles.addAll(Arrays.asList(RolesComponentsManager.getRolesComp(nombreComponente)));
    }

    /**
     * Constructor.
     */
    public MenuOncologos() {
        super();
        roles = new ArrayList<String>();
    }

    /**
     * MEtodo para agregar un rol a este Menu.
     * @param roles arreglo con los roles a asignar. 
     */
    public void agregarRoles(String... roles) {

        this.roles.addAll(Arrays.asList(roles));

    }

    @Override
    public JMenuItem add(JMenuItem menuItem) {

        /*Si se agrega una opcion a este menu, este debe adquierir todos los 
         * roles de su padre.*/
        if (menuItem instanceof MenuItemOncologos) {
            MenuItemOncologos mnuItem = (MenuItemOncologos) menuItem;
            agregarRolesMenuItem(mnuItem);
        }

        return super.add(menuItem);

    }
    /**
     * 
     * @param mnuItem 
     */
    public void agregarRolesMenuItem(MenuItemOncologos mnuItem){
          for (String rol : roles) {
                mnuItem.agregarRoles(rol);
            }
    }

    @Override
    /**
     * Este metodo le permite a la opcion de menu aparecer en la GUI
     * si alguno de sus roles esta en la session.
     */
    public boolean isVisible() {


        if (LogginManager.getRolesActivos() != null) {
            String[] rolesActivos = LogginManager.getRolesActivos();

            for (String rol : rolesActivos) {
                if (roles.contains(rol)) {
                    return true;
                }
            }
        } else {
            return true;
        }
        return false;

    }
}
